package com.monkeyboy.array;


/**
 * 替换空格
 * 将一个字符串中的空格替换成 "%20"。
 * <p>
 * Input:
 * "A B"
 * <p>
 * Output:
 * "A%20B"
 *
 * <p>
 *     解题思路：
 *      通过原始的字段构建一个新的字段如下
 *      原始字段： "A B"
 *      新的字段:  "A B  "(就是循环上面的字段，发现一个空格就往原始字段后面添加两个空格，因为%20是占三个字符，添加两个空格和原来的一个加上一共三个)
 *      最后结果：  "A20%B"
 *      然后就循环原始字段，从右往左循环，，依次把字符放到新的字段后面，如果发现空格就用%20替换
 *
 * </p>
 * @Author Gavin
 * @date 2021.03.30 09:20
 */
public class ReplaceTrip {
    public String replaceSpace(StringBuffer str) {
        int p1 = str.length() - 1;
        for (int i = 0; i <= p1; i++) {
            if (str.charAt(i) == ' ') {
                str.append("  ");
            }
        }
        int p2 = str.length() - 1;
        /**
         * 临界值条件分析：
         * 首先p1>=0就不用说了
         * 第二个p2要大于p1的目的就是是为了效率，因为如果是下面的这种状态比较就没有意以了
         * p1=ABCDEFG
         * p2=ABCDEFG
         */
        while (p1 >= 0 && p2 > p1) {
            char c = str.charAt(p1--);
            if (c == ' ') {
                str.setCharAt(p2--, '0');
                str.setCharAt(p2--, '2');
                str.setCharAt(p2--, '%');
            } else {
                str.setCharAt(p2--, c);
            }
        }
        return str.toString();
    }

    public static void main(String[] args) {
        ReplaceTrip replaceTrip=new ReplaceTrip();
        String a_b = replaceTrip.replaceSpace(new StringBuffer("A B"));
        System.out.println(a_b);
        String a=new String("abc");

        String str="abc";
        System.out.println(str.charAt(0));
    }
}
